﻿Public Class perGrupoAcesso
    Inherits PersistenciaPadrao.AcessoBD

#Region "Transação"

    Public Sub configurarAberturaConexao()

        If perConexao.SqlComando Is Nothing OrElse perConexao.SqlConexao Is Nothing Then
            MyBase.abrirConexao()
            perConexao.SqlComando = MyBase.retornarComandoSqlServer
            perConexao.SqlConexao = MyBase.retornarConexaoSqlServer
        Else
            MyBase.configurarTransacaoSqlServer(perConexao.SqlComando, perConexao.SqlConexao)
        End If

    End Sub

    Public Sub configurarFechamentoConexao()
        MyBase.fecharConexao()
        perConexao.SqlComando = Nothing
        perConexao.SqlConexao = Nothing
    End Sub

#End Region

#Region "Métodos"

    Public Function inserirGrupoAcesso(ByVal sNomeGrupo As String,
                                       ByVal iCodModu As Integer,
                                       ByVal bAbrirFecharConexao As Boolean) As Integer

        Dim sSql As String = String.Empty

        If Not bAbrirFecharConexao Then
            Me.configurarAberturaConexao()
        End If

        sSql = " INSERT INTO " &
               "    seg_grupos_acesso " &
               " ( " &
               "    nome, " &
               "    codModulo " &
               " ) " &
               " VALUES " &
               " ( " &
               "    @nome, " &
               "    @codModulo "

        If PersistenciaPadrao.AcessoBD.codSGBD = eSGBD.MY_SQL Then
            sSql &= " ); SELECT LAST_INSERT_ID() "
        ElseIf PersistenciaPadrao.AcessoBD.codSGBD = eSGBD.SQL_SERVER Then
            sSql &= " ); SELECT SCOPE_IDENTITY() "
        End If

        MyBase.limparParametros()
        MyBase.inserirParametro("@nome", sNomeGrupo)
        MyBase.inserirParametro("@codModulo", iCodModu)

        Return MyBase.executarConsultaCampo(sSql, bAbrirFecharConexao)

    End Function

    Public Sub editarGrupoAcesso(ByVal iCodGrupo As Integer,
                                 ByVal sNomeGrupo As String,
                                 ByVal iCodModu As Integer,
                                 ByVal bAbrirFecharConexao As Boolean)

        Dim sSql As String = String.Empty

        If Not bAbrirFecharConexao Then
            Me.configurarAberturaConexao()
        End If

        sSql = " UPDATE " &
               "   seg_grupos_acesso " &
               " SET " &
               "   nome = @nome, " &
               "   codModulo = @codModulo " &
               " WHERE " &
               "   codGrupo = @codGrupo "

        MyBase.limparParametros()
        MyBase.inserirParametro("@nome", sNomeGrupo)
        MyBase.inserirParametro("@codModulo", iCodModu)
        MyBase.inserirParametro("@codGrupo", iCodGrupo)

        MyBase.executarAcao(sSql, bAbrirFecharConexao)

    End Sub

    Public Sub excluirGrupoAcesso(ByVal iCodGrupo As Integer,
                                  ByVal bAbrirFecharConexao As Boolean)

        Dim sSql As String = String.Empty

        If Not bAbrirFecharConexao Then
            Me.configurarAberturaConexao()
        End If

        sSql = " DELETE FROM " &
               "   seg_grupos_acesso " &
               " WHERE " &
               "   codGrupo = @codGrupo "

        MyBase.limparParametros()
        MyBase.inserirParametro("@codGrupo", iCodGrupo)

        MyBase.executarAcao(sSql, bAbrirFecharConexao)

    End Sub

    Public Function selecionarGrupoAcesso() As DataTable

        Dim sSql As String = String.Empty

        sSql = " SELECT " &
               "    seg_grupos_acesso.codGrupo, " &
               "    seg_grupos_acesso.nome, " &
               "    seg_modulos.codModulo, " &
               "    seg_modulos.descricao " &
               " FROM " &
               "    seg_grupos_acesso " &
               " INNER JOIN seg_modulos ON seg_grupos_acesso.codModulo = seg_modulos.codModulo "

        Return MyBase.executarConsulta(sSql, True)

    End Function

    Public Function selecionarGrupoAcesso(ByVal iCodModulo As Int32,
                                          ByVal iCodSelecionado As Int32) As DataTable

        Dim sSql As String = String.Empty

        sSql = " SELECT " & Environment.NewLine &
               "    seg_grupos_acesso.codGrupo, " & Environment.NewLine &
               "    seg_grupos_acesso.nome, " & Environment.NewLine &
               "    seg_modulos.codModulo, " & Environment.NewLine &
               "    seg_modulos.descricao " & Environment.NewLine &
               " FROM " & Environment.NewLine &
               "    seg_grupos_acesso " & Environment.NewLine &
               " INNER JOIN seg_modulos ON seg_grupos_acesso.codModulo = seg_modulos.codModulo " & Environment.NewLine

        MyBase.limparParametros()

        If iCodModulo > 0 Then
            sSql &= " WHERE " & Environment.NewLine &
                    "     seg_modulos.codModulo = @codModulo " & Environment.NewLine &
                    " AND seg_grupos_acesso.codGrupo <> @codGrupo "

            MyBase.inserirParametro("@codModulo", iCodModulo)
            MyBase.inserirParametro("@codGrupo", iCodSelecionado)

        End If

        sSql &= " ORDER BY " &
               "    seg_modulos.codModulo, seg_grupos_acesso.nome "

        Return MyBase.executarConsulta(sSql, True)

    End Function

    Public Function selecionarGrupoAcessoCodigo(ByVal iCodGrupo As Integer,
                                                ByVal iCodModulo As Int32,
                                                ByVal iCodSelecionado As Int32) As DataRow

        Dim sSql As String = String.Empty
        Dim datGrupo As DataTable

        sSql = " SELECT " &
               "    seg_grupos_acesso.* " &
               " FROM " &
               "    seg_grupos_acesso " &
               " WHERE " &
               "    seg_grupos_acesso.codGrupo = @codGrupo "

        MyBase.limparParametros()
        MyBase.inserirParametro("@codGrupo", iCodGrupo)

        If iCodModulo > 0 Then
            sSql &= " AND seg_grupos_acesso.codModulo = @codModulo " & Environment.NewLine &
                    " AND seg_grupos_acesso.codGrupo <> @grupoSelecionado "
            MyBase.inserirParametro("@codModulo", iCodModulo)
            MyBase.inserirParametro("@grupoSelecionado", iCodSelecionado)
        End If

        datGrupo = MyBase.executarConsulta(sSql, True)
        If datGrupo.Rows.Count > 0 Then
            Return datGrupo.Rows(0)
        Else
            Return Nothing
        End If

    End Function

    Public Function selecionarGrupoAcessoMenus(ByVal iCodGrupo As Integer,
                                               ByVal iCodModu As Integer) As DataTable

        Dim sSql As String = String.Empty

        sSql = " SELECT " & Environment.NewLine &
               "    seg_modulo_menus.codMenu, " & Environment.NewLine &
               "    seg_menu_tipo.descricao tipo, " & Environment.NewLine &
               "    seg_modulo_menus.nome, " & Environment.NewLine &
               "    seg_modulo_menus.descricao, " & Environment.NewLine &
               "    seg_grupos_itens.codItem, " & Environment.NewLine &
               "    seg_grupos_itens.inserir, " & Environment.NewLine &
               "    seg_grupos_itens.excluir, " & Environment.NewLine &
               "    seg_grupos_itens.alterar, " & Environment.NewLine &
               "    seg_grupos_itens.consultar, " & Environment.NewLine &
               "    CASE WHEN inserir = 1 AND excluir = 1 AND alterar = 1 THEN 1 ELSE 0 END total " & Environment.NewLine &
               " FROM " & Environment.NewLine &
               "    seg_grupos_itens " & Environment.NewLine &
               " INNER JOIN seg_modulo_menus ON seg_grupos_itens.codMenu = seg_modulo_menus.codMenu " & Environment.NewLine &
               " INNER JOIN seg_menu_tipo ON seg_modulo_menus.codTipo = seg_menu_tipo.codTipo " & Environment.NewLine &
               " WHERE " & Environment.NewLine &
               "    seg_grupos_itens.codGrupo = @codGrupo " & Environment.NewLine &
               " UNION " & Environment.NewLine &
               " SELECT " & Environment.NewLine &
               "    seg_modulo_menus.codMenu, " & Environment.NewLine &
               "    seg_menu_tipo.descricao tipo, " & Environment.NewLine &
               "    seg_modulo_menus.nome, " & Environment.NewLine &
               "    seg_modulo_menus.descricao, " & Environment.NewLine &
               "    seg_grupos_itens.codItem, " & Environment.NewLine &
               "    seg_grupos_itens.inserir, " & Environment.NewLine &
               "    seg_grupos_itens.excluir, " & Environment.NewLine &
               "    seg_grupos_itens.alterar, " & Environment.NewLine &
               "    seg_grupos_itens.consultar, " & Environment.NewLine &
               "    CASE WHEN inserir = 1 AND excluir = 1 AND alterar = 1 THEN 1 ELSE 0 END total " & Environment.NewLine &
               " FROM " & Environment.NewLine &
               "    seg_modulo_menus " & Environment.NewLine &
               " INNER JOIN seg_menu_tipo ON seg_modulo_menus.codTipo = seg_menu_tipo.codTipo " & Environment.NewLine &
               " LEFT JOIN seg_grupos_itens ON seg_grupos_itens.codMenu = seg_modulo_menus.codMenu AND seg_grupos_itens.codGrupo = @codGrupo " & Environment.NewLine &
               " WHERE " & Environment.NewLine &
               "     seg_modulo_menus.codModulo = @codModulo " & Environment.NewLine &
               " AND seg_modulo_menus.codMenu NOT IN (SELECT codMenu FROM seg_grupos_itens WHERE codGrupo = @codGrupo) " &
               " ORDER BY tipo, descricao "

        MyBase.limparParametros()
        MyBase.inserirParametro("@codGrupo", iCodGrupo)
        MyBase.inserirParametro("@codModulo", iCodModu)

        Return MyBase.executarConsulta(sSql, True)

    End Function

    Public Function seGrupoUsuarios(ByVal iCodGrupo As Int32) As Boolean

        Dim sSql As String = String.Empty
        Dim datGrupo As New DataTable

        sSql = " SELECT " &
               "    seg_usua_grupos.* " &
               " FROM " &
               "    seg_usua_grupos " &
               " WHERE " &
               "    codGrupo = @codGrupo "

        MyBase.limparParametros()
        MyBase.inserirParametro("@codGrupo", iCodGrupo)

        datGrupo = MyBase.executarConsulta(sSql, True)
        If datGrupo.Rows.Count = 0 Then
            Return False
        Else
            Return True
        End If

    End Function

    Public Function selecionarGrupoAcessoModulo(ByVal iCodModulo As Integer) As DataTable

        Dim sSql As String = String.Empty

        sSql = " SELECT " &
               "    seg_grupos_acesso.codGrupo, " &
               "    seg_grupos_acesso.nome " &
               " FROM " &
               "    seg_grupos_acesso " &
               " WHERE " &
               "    codModulo = @codModulo "

        MyBase.limparParametros()
        MyBase.inserirParametro("@codModulo", iCodModulo)

        Return MyBase.executarConsulta(sSql, True)

    End Function

#End Region


End Class
